// 编译器级别，保证头文件不会被重复包含
#pragma once

/**
 * noncopytable 被继承以后，派生类对象可以正常的构造和析构，但是派生类对象
 * 无法进行拷贝构造和赋值操作。
*/
class noncopyable
{
    public:
    // 拷贝构造和赋值重载是删除
    noncopyable(const noncopyable&) = delete;
    noncopyable& operator=(const noncopyable&) = delete;
    protected:
    // 构造和析构是默认
    noncopyable() = default;
    ~noncopyable() = default;
};